<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>
        //forEach遍历数组
        var arr = ['red','blue','yellow','green']
        arr.forEach((color,index)=>console.log(index,color))

        //concat连接数组,返回一个数组,不改变原数组
        var arr1 = [1,2,3]
        console.log(arr1.concat([1,2,3],[2,2]))//[1,2,3,1,2,3,2,2]
        console.log(arr1)

        //join将数组全部元素接成字符串,返回一个数组,不改变原数组
        var arr2 = [1,2,[2,3]]
        console.log(arr2.join())//'1223'
        console.log(arr2)

        //push在数组末端添加元素,返回数组长度,[]包裹的内容直接当作一个元素插入
        var arr3 = [1,2,3]
        console.log(arr3.push([4,5,6],7))//5
        console.log(arr3)

        //pop去除数组末端的元素,返回去除的元素
        console.log(arr3.pop())//7
        console.log(arr3)

        //unshift在数组前端添加元素,返回数组长度,[]包裹的内容直接当作一个元素插入
        var arr4 = [1,2,3]
        console.log(arr4.unshift([4,5,6],7))//5
        console.log(arr4)

        //shift去除数组前端的元素,返回去除的元素
        console.log(arr4.shift())//[4,5,6]
        console.log(arr4)

        //flat展平数组,只展平一级,返回展平结果,不改变原数组
        var arr5 = [1,[2,3],[[4,5],6]]   
        console.log(arr5.flat())//[1,2,3,[4,5],6]
        console.log(arr5)

        //sort排序数组,返回排序后的数组,改变原数组
        var arr6 = [3,2,1]
        console.log(arr6.sort())//[1,2,3]
        console.log(arr6)

        //reverse逆序数组,返回逆序后的数组,改变原数组
        var arr7 = [2,5,4,3,1]
        console.log(arr7.reverse())//[1,3,4,5,2]
        console.log(arr7)

        //slice截取数组片段为一个新数组,不改变原数组
        var arr8 = [1,2,3,4,5]
        console.log(arr8.slice(1,5))//[2,3,4,5],前闭后开区间
        console.log(arr8)

        //at返回对应索引的元素
        var arr9 = [1,2,3,[4,5]]
        console.log(arr9.at(1))//2, 索引为1的元素
        console.log(arr9.at(-1))//[4,5],倒数第一个元素
        console.log(arr9.at(-11))//undefined,不存在倒数11个元素

        //splice从索引处移除1或多个元素,并从移除位置插入(可选)新元素,返回去除的元素组成的数组
        var arr10 = [1,2,3,4,5,6]
        console.log(arr10.splice(2,2,[3,4],1))//[3,4]
        console.log(arr10)

        //indexOf正向查找对应元素的索引,返回第一个匹配结果
        //lastIndexOf逆向查找对应元素的索引,返回第一个匹配结果
        var arr11 = [1,2,2,3]
        console.log(arr11.indexOf(2))//1
        console.log(arr11.lastIndexOf(2))//2

        //map返回对每一个item进行某些操作后的结果数组,不改变原数组
        var arr12 = [1,2,3,4]
        console.log(arr12.map((num)=>num%2!=0?num+1:num))//[2,2,4,4]
        console.log(arr12)

        //flatMap进行一次map操作再展平
        var arr13 = [1,2,3,4]
        console.log(arr13.map((num)=>[num+1,num+2]))//[[2,3],[3,4],[4,5],[5,6]]
        console.log(arr13.flatMap((num)=>[num+1,num+2]))//[2,3,3,4,4,5,5,6]

        //filter返回所有callback语句为true的元素组成的数组
        var arr14 = [1,2,3,4]
        console.log(arr14.filter((num)=>num%2===0))//[2,4]
        //find返回第一个callback语句为true的元素
        console.log(arr14.find((num)=>num%2===0))//2
        //findLast返回最后一个callback语句为true的元素
        console.log(arr14.findLast((num)=>num%2===0))//4
        //findIndex返回第一个callback语句为true的元素的索引
        console.log(arr14.findIndex((num)=>num%2===0))//1
        //findLastIndex返回最后一个callback语句为true的元素的索引
        console.log(arr14.findLastIndex((num)=>num%2===0))//3

        //every在callback语句全部返回true时返回true，否则为false
        console.log(arr14.every((item)=>typeof(item)==="number"?true:false))
        console.log(arr14.every((item)=>item%2===0?true:false))
        //some在callback语句全部返回false时返回false，否则为true
        console.log(arr14.some((item)=>typeof(item)==="string"?true:false))
        console.log(arr14.some((item)=>item%2===0?true:false))
    </script>

</body>

</html>